#ifndef ARRAYOPERATION_H
#define ARRAYOPERATION_H
#include "QVector"

class ArrayOperation
{
public:
    static ArrayOperation& instance()
    {
        static ArrayOperation instance;
        return instance;
    }


    /**
     * @brief ArrayOperation::maximum 求取最值
     * @param vec 输入向量
     * @param minVal 最小值
     * @param maxVal 最大值
     */
    //模板函数必须放到头文件中
    template <typename T>
    void maximum(const QVector<T>& vec, T& minVal, T& maxVal) {
        if (vec.isEmpty())  return; // 如果向量为空，直接返回
        minVal = maxVal = vec[0]; // 初始化最小值和最大值
        for (const T& value : vec) {
            if (value < minVal) minVal = value;
            if (value > maxVal) maxVal = value;
        }
    }

    double calculateMean(const QVector<double> &data);
    double calculateStdDev(const QVector<double> &data);
    double ListofSTD(const QVector<double> &arr);
private:
    ArrayOperation();
    ~ArrayOperation();
    ArrayOperation(const ArrayOperation&)=delete;
    ArrayOperation& operator=(const ArrayOperation&)=delete;
};

#endif // ARRAYOPERATION_H
